﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DECOR.BL.BE;
using DECOR.DL.DALCF;

namespace DECOR.BL.BC
{
    public class CentroBC
    {
        #region Singleton
        private CentroBC() { }
        private static CentroBC _instance = null;
        public static CentroBC Instance
        {
            get { return (_instance == null) ? _instance = new CentroBC() : _instance; }
        }
        #endregion


        /// <summary>
        /// Devuelve una lista de centros de acuerdo al material y a la organización de ventas.
        /// </summary>
        /// <param name="pObjMaterial">Objeto que contiene el código de material.</param>
        /// <param name="pCodOrgVtas">Código de la organización de ventas.</param>
        public List<GenericBE> listar(MaterialBE pObjMaterial, string pCodOrgVtas)
        {
            List<GenericBE> lstCentros = DaoFactory.CentroDALC.listar(pObjMaterial.CodMaterial.PadLeft(18, '0'), pCodOrgVtas);
            //MaterialBE objMaterial = MaterialBC.Instance.leerMaterial(pCodMaterial, pCodOrgVtas, "10");
            GenericBE objAux = null;
            //si el mat es NAcional, siempre le agrega el lote 9110 si no lo tiene
            if (pObjMaterial.TipoMaterial == "NA")
            {
                //busca si existe el 9110 / 2010
                if (pCodOrgVtas == "1000")
                {
                    objAux = lstCentros.Find(delegate(GenericBE obj) { return (obj.Codigo == "9110"); });
                }
                else if (pCodOrgVtas == "2000")
                {
                    objAux = lstCentros.Find(delegate(GenericBE obj) { return (obj.Codigo == "2010"); });
                }
                //si no existe, lo busca y lo agrega
                if (objAux == null)
                {
                    List<GenericBE> lstCentrosAux = this.listar();
                    if (pCodOrgVtas == "1000")
                    {
                        objAux = lstCentrosAux.Find(delegate(GenericBE obj) { return (obj.Codigo == "9110"); });
                    }
                    else if (pCodOrgVtas == "2000")
                    {
                        objAux = lstCentrosAux.Find(delegate(GenericBE obj) { return (obj.Codigo == "2010"); });
                    }
                    if (objAux != null)
                    {
                        lstCentros.Add(objAux);
                    }
                }
            }
            return lstCentros;
        }

        /// <summary>
        /// Devuelve una lista completa de centros.
        /// </summary>
        public List<GenericBE> listar()
        {
            List<GenericBE> lista = DaoFactory.CentroDALC.listar("", "");
            GenericBE objGeneric = new GenericBE();
            objGeneric.Codigo = ""; objGeneric.Descripcion = "Todos";
            lista.Add(objGeneric);
            return lista;
        }
    }
}
